[
    async function(cmd){
        /*  node build.js br Bat_login 7456 
                            脚本名字   端口 ip
            接收参数
        	DATA_["EE"] = 来自那个fid;
			DATA_["EB"] = 来自哪个网关;
			DATA_["EU"] = 用户id ;
			DATA_["ER"] = 角色id;
            DATA_["ip"] = 用户Ip
            DATA_["E"] = 动作
            DATA_["L"] = 内容
            发送 
            E = SETUP //设置用户的信息
            L = {U:-1,R:-1,Q:-1}
                U 用户id -1初始化  0 不变 其他对应值
                R 角色id -1初始化  0 不变 其他对应值
                Q 游戏区 -1初始化  0 不变  其他对应值

            发送目标[
                string 来自哪个网关_来自那个fid
                0  全服
                -1 本服
                数组都个用户传递角色的id 多人通信
            ]

            内容小数据发送  FASONG_(发送目标 ,动作,内容 );
            内容大数据必须是数组 FASONG(发送目标 ,动作,内容 );
        */
        var THIS = Kuo_Bat_login;
        var Parot =0;
        var IPP = "127.0.0.1";
        THIS.ServerId =  Mode("Tools").Int(cmd[0]);
        THIS.Gateway = await THIS.GateUpdate();
        let $db = await db("gateway");
        let shuju = await $db.Where({id:THIS.ServerId}).Find();
        if(shuju){
            Parot = shuju.udpprot;
            IPP = shuju.udpip;
            UDPSERVER.bind(Parot,IPP);
        }else{
            p("No Serverid");
            return ;
        }
       
        UDPSERVER.on('listening', function () {
            console.log('UDP Server '+IPP+':'+(Parot));
        });

       //{ E: '动作', L: '内容', ip: '用户ip', EE: 用户FID, EB: 所在前端服务器, EU: 用户uid, ER: 用户角色 }
        UDPSERVER.on('message', async function (msg, rinfo) {

            var DATA = MSGPACK.decode(msg);
            if(DATA && typeof(DATA) == "object"){

                if(Debug){
                    p(THIS.ServerId+" <= ",DATA);
                }
                if(DATA.E == "Gateway"){
                    THIS.Gateway = await THIS.GateUpdate();
                    return ;
                }

                var token = DATA['EB']+'_'+DATA['EE'];
                if(!THIS.FID[token]){
                    THIS.FID[token] = {
                        EB:DATA['EB'],
                        EE:DATA['EE'],
                        uid:0,
                        roleid:0,
                        ip:""
                    }
                }
                if(DATA['EU'] > 0){
                    if(!THIS.FID[token]['uid']){
                        THIS.FID[token]['uid'] = DATA['EU'];
                    }
                }
                if(DATA['ER'] > 0){
                    if(!THIS.FID[token]['roleid']){
                        THIS.FID[token]['roleid'] = DATA['ER'];
                    }

                    if(THIS.USER[DATA['ER']]){
                        if(THIS.USER[DATA['ER']] != token){
                            let _token = THIS.USER[DATA['ER']];
                            if( THIS.FID[_token].ip != THIS.FID[token].ip){
                                THIS.FASONG_(_token,"SETUP",{U:-1,R:-1,Q:-1});
                                delete(THIS.FID[_token]);
                                return ;
                            }else{
                                THIS.USER[DATA['ER']] = token;
                            }
                        }
                    }else{
                        THIS.USER[DATA['ER']] = token;
                    }
                }

                if(DATA['E'] == 'Online'){

                    if(DATA['ip']){
                        THIS.FID[token].ip = DATA['ip'];
                    }
                    
                    return ;
                }else if(DATA['E'] == 'Dropped'){
                    
                    delete(THIS.FID[token]);
                    delete(THIS.USER[DATA['ER']]);
                    return ;
                }

                DATA.token = token;
                let func_ = "Func_"+DATA.E.toUpperCase();
                if(THIS[func_]){
                    THIS[func_](DATA);
                }else{
                    if(Debug){
                        p(func_+" Error");
                    }
                }
            }
        });

        UDPSERVER.on('error', function (err) {
            
        });

        setInterval(async function () {
            
            let $db = await db("gateway");
            await $db.Where({id:THIS.ServerId}).Update({hit:count(THIS.FID)});
         
        }, WSPingTime);
      
        return true;
    }

]